/*
 * Copyright 2025 JetLinks https://www.jetlinks.cn
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.jetlinks.community.elastic.search.enums;

import co.elastic.clients.elasticsearch._types.query_dsl.Query;
import org.hswebframework.ezorm.core.param.Term;
import org.jetlinks.core.metadata.DataType;
import org.jetlinks.community.spi.Provider;
import org.jetlinks.community.things.utils.ThingsDatabaseUtils;

public interface ElasticSearchTermType {

    Provider<ElasticSearchTermType> supports = Provider.create(ElasticSearchTermType.class);

    String getId();

    boolean isSupported(Term term);

    Query.Builder process(Term term, Query.Builder builder);

    default Query process(Term term) {
        return process(term, new Query.Builder()).build();
    }

    default Object convertTermValue(DataType type, Object value) {
        return ThingsDatabaseUtils.tryConvertTermValue(type, value);
    }
}
